#!/bin/sh
  # 動的（Dynamic）ライブラリのデモ
  #ローダブル・モジュールとかバンドルともいう
  
  # 動的ライブラリのオブジェクトファイル libhello.o を作成します。
  gcc -fno-common -fPIC -Wall -g -c libhello.c
  
  #Apple敵には.bundleという拡張子が推奨だけど、互換性のために.soを使うことが多い
  #Dynamic Libraryには-bundle オプション
  #ホストプログラムのシンボルを使う場合， -undefined suppress を指定して未定義のシンボルを使う設定
  #-flat_namespace を指定して新しいリンカが Mac OS X 10.1 でも使えるようにする
  gcc -bundle -flat_namespace -undefined suppress -o libhello.so libhello.o


  # demo_dynamic プログラムファイルをオブジェクトファイルへ
  # コンパイルします。
  gcc -Wall -g -c demo_dynamic.c

  # demo_use プログラムを作成します。このプログラムが使用する
  # 唯一の特別なライブラリは、プログラム起動後までロードされ
  # ないので、動的ライブラリをどこに探しにいけばよいかを教える
  # 必要はありません。但し、動的ライブラリをロードするための
  # ライブラリを含めるのに、-ldl オプションが必要となります。

  gcc -g -o demo_use_dynamic demo_dynamic.o -ldl

  # プログラムを実行します。場合によってはDYLD_LIBRARY_PATH を使って、どこに
  # 動的ライブラリが存在するかをプログラムに教える必要がある

  ./demo_use_dynamic
